Linux之shell脚本 您所在的位置:网站首页 linux 命令结果赋值给变量 Linux之shell脚本

Linux之shell脚本

2023-04-24 07:56| 来源: 网络整理| 查看: 265

本文共 6603 字,大约阅读时间需要 22 分钟。

shell基本命令

$变量名:使用变量的值,当解释器需要识别变量的边界时可以给变量加上{} readonly 变量名:把变量定义为只读变量 unset 变量名:删除变量,但是不能删除只读的变量 read [选项] 变量名:读取来自键盘输入的值,将其存储于最后的变量名;-p后面接提示符,-t后面接超时时间(秒) declare [选项] 变量名:声明变量的属性;-a将后面的变量定义为数组,-l赋值时将字符转为小写,-u赋值时将字符转为大写,-i 数据类型定义为整形数字,-x用法与export一样,将后面的变量变成环境变量,-r将后面的变量设置为只读(readonly) 运行shell时同时存在三种变量:

变量类型 说明 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问 环境变量 所有的程序(包括shell启动的程序)都能访问环境变量 shell变量 shell程序设置的特殊变量

特殊变量:

变量 含义 $0 当前脚本文件名 $数字 传递给脚本或函数的第几个参数 $# 传递给脚本或函数参数的个数 $* 传递给脚本或函数的所有参数 $@ 传递给脚本或函数的所有参数 $? 上个命令退出状态或者函数返回值 $$ 当前shell进程ID

$∗和 $@ 的区别为: ∗和@ 都表示传递给函数或脚本的所有参数,不被双引号(" “)包含时,都以"1”、“2” 、…、 “n"的形式输出所有参数。但是当它们被双引号(” “)包含时,”*" 会将所有的参数作为一个整体,以"1、2、 …、 n"的形式输出所有参数;“@” 会将各个参数分开,以"1"、“2” 、…、 “n” 的形式输出所有参数。 echo [选项] 字符串或者文字:在终端打印该内容 option:-e(对特殊字符进行转义)、-n(不换行);默认情况下不对特殊字符进行转义,并且换行

转义字符 含义 \\ 反斜杆 \" 双引号 \a 响铃 \b 退格(删除键) \f 换页 \n 换行 \r 回车 \t 水平制表符(Tab) \v 垂直制表符

特殊情况——转义字符()自身的转义:shell在转义\时需要进行两次转义,因此如果转义一个\需要四个\,即"\\"转义得到\。 例如:

echo “\\\\” #得到\ echo -e “\\\\” #得到\

算数运算符: 运算符 说明 例子 + 加法 `expr $a + $b` - 减法 `expr $a - $b` * 乘法 `expr $a \* $b` / 除法 `expr $a / $b` % 取余 `expr $a % $b` = 赋值 a = $b == 相等 `expr $a == $b` != 不相等 `expr $a != $b`

注意:*前需要加转义字符(),并且表达式与运算符之间要有空格,方括号与变量以及变量与运算符之间也需要有括号

比较运算符: 运算符 说明 例子 -eq 等于 [ $a -eq $b ]或者(( $a == $b )) -nq 不等于 [ $a -eq $b ]或者(( $a != $b )) -gt(great) 大于 [ $a -eq $b ]或者(( $a > $b )) -lt(less) 小于 [ $a -eq $b ]或者(( $a < $b )) -ge 大于等于 [ $a -eq $b ]或者(( $a >= $b )) -le 小于等于 [ $a -eq $b ]或者(( $a list of commands [ return value ] }

函数的使用

1、调用函数只需要给出函数名,不需要加括号,可以直接加参数,多个参数用空格隔开 2、 函数返回值,可以显式增加return语句;如果不加,会将最后一条命令运行结果作为返回值 3、Shell 函数返回值只能是整数,一般用来表示函数执行成功与否,0表示成功,其他值表示失败 例如: function_name 参数1 参数2 参数3 … 参数n

函数的删除

删除函数也可以使用 unset 命令,不过要加上 .f 选项 例如:unset .f function_name

shell文件的包含

Shell可以包含外部脚本,将外部脚本的内容合并到当前脚本

第一种:. filename #点与filename之间有空格; 第二种:source filename #source 与filename之间有空格

Shell中进程相关命令 查看进程

命令:ps,process statue的缩写 参数:-e、-f -e:显示所有进程 -f:全格式 例如:ps -ef #全格式显示所有进程

查找进程

命令:grep,Global Regular Expression Print的缩写 参数:-r、-v -r:递归的方式查找符合条件的文件,当指定要查找的是目录而非文件时,必须使用这项参数 -v:显示不包含匹配文本的所有行 例如:grep -r “cd” /home/wq/shell_script #查找指定目录/home/wq/shell_script及其子目录(如果存在子目录的话)下所有文件中包含字符串"cd"的文件,并打印出该字符串所在行的内容 例如:grep -v “cd” script1.sh #查找文件script1.sh中不包含"cd"字符串的所有行内容

打印字段

命令:awk 参数:-F fs、-f file、-v var=val ‘脚本命令’ 文件名 -F fs: 指定以 fs 作为输入行的分隔符,awk 命令默认分隔符为空格或制表符 -f file:从脚本文件中读取 awk 脚本指令,以取代直接在命令行中输入指令 -v var=val:在执行处理过程之前,设置一个变量 var,并给其设备初始值为 val 例如: awk ‘{print $2}’ test.txt #$0 代表整个文本行;$1 代表文本行中的第1个数据字段;$2代表文本行中的第2个数据字段;$n代表文本行中的第n个数据字段

杀死进程

第一种:kill [选项] pid(进程ID号) 说明:kill -l可以列出所有可用的选项,其中常用的有-1、-9和-15; 1:重新加载进程;9:彻底杀死进程;15:安全的停止进程,也是默认情况 例如:kill 3606 第二种:pkill [选项] 进程名 说明:pkill -l可以列出所有可用的选项; 例如:pkill “bash”

Shell中打开新终端并执行命令

命令:gnome-terminal 参数1:–maximize、–full-screen、–title=“new title”、–window、–tab 参数2:-- 要执行的命令 maximize:打开后自动最大化 full-screen:打开后全屏 title:设置新打开的终端的标题 window:window的个数=用于显示终端的窗口数 tab:tab的个数+1=tab前窗口下终端个数 例如: gnome-terminal --window --window #打开两个窗口用于显示终端 gnome-terminal --window --tab --window --tab --tab #打开两个窗口用于显示终端,第一个窗口下两个终端,第二个窗口下三个终端 例如: gnome-terminal – ls #打开一个终端并执行ls命令,然后终端退出 gnome-terminal – bash -c “ls; exec bash” ##打开一个终端并执行ls命令,终端不退出 bash:命令处理程序 -c:要执行的命令不止一条 exec :bash内置命令,表示不启用新的shell进程,将当前shell进程替换为执行exec后命令的一个进程,执行完毕就退出,且exec命令后的其他命令将不再执行

Shell脚本的执行

方式一:./ filename或者sh filename 此方式执行脚本时,当前shell是父进程,生成一个子shell进程,在子shell中执行脚本。脚本执行完毕,退出子shell,回到当前shell。子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell,修改的上下文不会影响当前shell

例如: #! /bin/bash echo “current path:” pwd #子shell从父shell中继承了环境变量,但是执行后不会改变父shell的环境变量;因此子shell的当前路径与父shell的当前路径一致 cd /home/wq/catkin_ws/devel echo “modified path:” pwd #子shell中的操作和环境变量不会影响父进程,在执行完shell后又回到了父进程;因此子shell的当前路径改为/home/wq/catkin_ws/devel后父进程的当前路径仍然是之前路径

注意:在父shell中使用export定义变量,子shell可以调用;但在子shell中使export定义变量,父shell无法调用

方式二:. filename或者source filename 此方式执行脚本时,在当前上下文中执行脚本,不会生成新的进程。脚本执行完毕,回到当前shell,修改的上下文会影响当前shell

转载地址:https://blog.csdn.net/qq_26860485/article/details/126923763 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有